package com.shz.utils;

import java.text.DecimalFormat;

public class GeoDistanceCalculator {

    /**
     * 地球平均半径，单位为公里
     */
    private static final double EARTH_RADIUS = 6371.0;

    /**
     * 根据两个经纬度坐标计算两点之间的距离
     *
     * @param lat1 第一个坐标的纬度
     * @param lon1 第一个坐标的经度
     * @param lat2 第二个坐标的纬度
     * @param lon2 第二个坐标的经度
     * @return 两点之间的距离（单位：公里），保留两位小数
     */
    public static double calculateDistance(double lat1, double lon1, double lat2, double lon2) {
        // 将角度转换为弧度
        lat1 = Math.toRadians(lat1);
        lon1 = Math.toRadians(lon1);
        lat2 = Math.toRadians(lat2);
        lon2 = Math.toRadians(lon2);

        // 计算纬度和经度之差
        double dLat = lat2 - lat1;
        double dLon = lon2 - lon1;

        // Haversine公式
        double a = Math.pow(Math.sin(dLat / 2), 2) +
                   Math.cos(lat1) * Math.cos(lat2) * Math.pow(Math.sin(dLon / 2), 2);
        double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));

        // 计算距离
        double distance = EARTH_RADIUS * c;

        // 保留两位小数
        DecimalFormat df = new DecimalFormat("#.##");
        return Double.parseDouble(df.format(distance));
    }

    public static void main(String[] args) {
        double distance = calculateDistance(30.312396000000007, 120.073218, 30.323124999999987,120.07140099999992 );
        System.out.println("两地之间的距离为：" + distance + " 公里");
    }
}